package com.example.chapter05;

import android.app.DatePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

/**
 * 日期选择Activity：展示两种日期选择方式（内置DatePicker控件和弹窗式DatePickerDialog）
 * 实现了View.OnClickListener接口（处理按钮点击事件）
 * 实现了DatePickerDialog.OnDateSetListener接口（处理弹窗选择日期后的回调）
 */
public class DatePickerActivity extends AppCompatActivity implements View.OnClickListener, DatePickerDialog.OnDateSetListener {

    // 声明日期选择控件（DatePicker）：用于在界面直接选择日期
    private DatePicker dp_date;
    // 声明文本控件（TextView）：用于显示最终选择的日期结果
    private TextView tv_date;

    /**
     * Activity创建时执行的初始化方法
     * @param savedInstanceState 用于恢复Activity状态的Bundle对象（如屏幕旋转时保存数据）
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 加载布局文件（activity_date_picker.xml），将XML布局与当前Activity关联
        setContentView(R.layout.activity_date_picker);

        // 给"确认"按钮（id: btn_ok）设置点击监听器，当前Activity实现了OnClickListener接口，故传this
        findViewById(R.id.btn_ok).setOnClickListener(this);
        // 给"弹出日期对话框"按钮（id: btn_date）设置点击监听器
        findViewById(R.id.btn_date).setOnClickListener(this);

        // 获取布局中的DatePicker控件实例，用于后续读取用户选择的日期
        dp_date = findViewById(R.id.dp_date);
        // 获取布局中的TextView控件实例，用于显示日期结果
        tv_date = findViewById(R.id.tv_date);

    }

    /**
     * 点击事件处理方法：当按钮被点击时触发
     * @param v 被点击的视图（这里指两个按钮）
     */
    @Override
    public void onClick(View v) {
        // 获取被点击视图的ID，用于判断点击的是哪个按钮
        int id = v.getId();

        // 如果点击的是"确认"按钮（btn_ok）
        if (id == R.id.btn_ok) {
            // 从DatePicker控件中获取用户选择的年、月、日
            // 注意：DatePicker的getMonth()返回值是0-11（0代表1月，11代表12月），故需要+1才是实际月份
            String desc = String.format(
                    "您选择的日期是%d年%d月%d日",
                    dp_date.getYear(),       // 获取年份
                    dp_date.getMonth() + 1,  // 获取月份（+1修正为实际月份）
                    dp_date.getDayOfMonth()  // 获取日
            );
            // 将拼接好的日期文本设置到TextView中显示
            tv_date.setText(desc);

            // 如果点击的是"弹出日期对话框"按钮（btn_date）
        } else if (id == R.id.btn_date) {
            // 注释部分：获取系统当前日期（年、月、日）的逻辑
            // Calendar calendar = Calendar.getInstance();  // 获取日历实例（包含当前时间）
            // int year = calendar.get(Calendar.YEAR);      // 获取当前年份
            // int month = calendar.get(Calendar.MONTH);    // 获取当前月份（0-11）
            // int day = calendar.get(Calendar.DAY_OF_MONTH); // 获取当前日

            // 创建日期选择对话框（DatePickerDialog）
            // 参数说明：
            // 1. this：上下文（当前Activity）
            // 2. this：日期选择完成后的回调监听器（当前Activity实现了OnDateSetListener）
            // 3. 2090：对话框默认显示的年份
            // 4. 5：对话框默认显示的月份（0-11，这里5代表6月）
            // 5. 11：对话框默认显示的日
            DatePickerDialog dialog = new DatePickerDialog(this, this, 2025, 10, 29);

            // 显示日期选择对话框（用户可见）
            dialog.show();
        }
    }

    /**
     * 日期选择对话框的回调方法：当用户在弹窗中选择日期并确认后触发
     * @param view 触发回调的DatePicker控件（弹窗中的日期选择器）
     * @param year 用户选择的年份
     * @param month 用户选择的月份（0-11，需+1才是实际月份）
     * @param dayOfMonth 用户选择的日
     */
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        // 拼接日期文本（月份+1修正为实际月份）
        String desc = String.format(
                "您选择的日期是%d年%d月%d日",
                year,
                month + 1,
                dayOfMonth
        );
        // 将结果显示到TextView中
        tv_date.setText(desc);
    }
}